/**
 * @defgroup TestReaderAndWriter 关于Java读写机制的例子
 * @author 李焕帅
 * @version 0.1
 * @date 31/07/2012
 * @{
 */
package indd.lihs.basic.javabasictester.io;

import java.io.*;
import indd.lihs.basic.exceptions.*;

/**
 * @name 文件读写测试类型定义
 * @{
 */
public class TestReaderAndWriter
{
    /**
     * 主函数
     * @param[in] args 参数字符串数组
     * @return void
     * @note 某个方法可能抛出某种异常,但其中没有定义相应的捕获代码.这时如果抛出,\n
     * 则系统直接退出该方法,并将异常发回给调用者其中, 如果父类的方法没有声明某种必\n
     * 检异常,子类进行方法覆盖时,也不能声明
     */
	public static void main(String[] args)
	{
		BufferedReader fin = null;
		PrintWriter fout = null;
		try
		{
			File sourceFile = new File("test.in");
			if(!sourceFile.isFile())
				throw new FileNotExistedException(sourceFile.getName());
			File targetFile = new File(args[1]);
			if(targetFile.isFile())
				throw new FileExistedException(targetFile.getName());
			
			String str;
			int lineCount = 1;
			fin = new BufferedReader(new FileReader(sourceFile));
			fout = new PrintWriter(new BufferedWriter(new FileWriter(targetFile)));
			//逐行读写
			while((str = fin.readLine()) != null)
			{
				fout.println(lineCount + ":\t" + str);
				++lineCount;
			}
		}
		catch (FileNotExistedException ex)
		{
			System.out.println(ex);
			ex.printStackTrace();
		}
		catch (FileExistedException ex)
		{
			System.out.println(ex);
			ex.printStackTrace();
		}
		catch (FileNotFoundException ex)
		{
			System.out.println(ex);
			ex.printStackTrace();
		}
		catch (IOException ex)
		{
			System.out.println(ex);
			ex.printStackTrace();
		}
		finally
		{
			try
			{ //文件流不为空时关闭
				if(fin != null) fin.close();
				if(fout != null) fout.close();
			}
			catch (Exception ex) //捕获所有异常
			{
				System.out.println(ex);
				ex.printStackTrace();
			}
		}
	}
}

/** @}*/ //文件读写测试类型定义

/** @}*/ //模块定义
